QuickSight と RDS を RDS Proxy 経由で繋げてみた

QuickSight と RDS を RDS Proxy 経由で繋げてみた

QuickSight のデータセットに MySQL を選び、そこに RDS Proxy エンドポイントを書いてあげると接続できます。
Clock Icon2025.01.09

こんにちは、すながわです。
今回は、RDS for MySQL 8.0.39 と QuickSight を RDS Proxy 経由で接続してみます。
以下、構成のイメージです。プライベートサブネットにある RDS に接続します。

スクリーンショット 2025-01-09 14.42.58

RDS および RDS Proxy の作成

以下構成で作成します。

  • RDS for MySQL 8.0.39
  • db.t3.micro
  • プライベートサブネットに配置
  • インスタンス作成時の画面で「RDS Proxy を作成」にチェックを入れる。(※ RDS Proxy はインスタンス作成後でも追加できるので、作成時にチェックを忘れた方はコンソールから適宜作成してください。)

EC2 作成

以下の構成で作成します。

  • AL2023
  • パブリックサブネットに配置
  • 下記ブログを参考に、mysql クライアントコマンドが使えるようセットアップします。mysql --version できちんとバージョンが返ればOKです。

https://dev.classmethod.jp/articles/Install-mysql-on-al2023-and-login/

この EC2 を作成する理由は、RDS にログインしてデータベースやテーブルの作成などを行うためです。RDS へ接続できればいいので、今回は EC2 をパブリックサブネットに配置し、RDS への踏み台として利用しますが、他のやり方でも構いません。

QuickSight ENI 用 セキュリティグループ作成

QuickSight ENI 用のセキュリティグループを作成し、
RDS Proxy のセキュリティグループからの全ての TCP を許可するインバウンドルールを設定します。アウトバウンドルールはデフォルトのまま変えてないので画像は載せていません。

スクリーンショット 2025-01-09 14.51.09

上記のようにインバウンドルールを追加する理由は、QuickSight 用の ENI にアタッチされたセキュリティグループの通信はステートフルじゃないためです。このような設定を入れないと、QuickSight から RDS Proxy への行きの通信はできても帰りの通信で弾かれてしまうため、結果として通信がうまくいきません。
詳細は以下ブログをご参照ください。

https://aws.amazon.com/jp/blogs/news/amazon-quicksight-private-vpc-access/

RDS Proxy のセキュリティグループ設定

以下のように、前述の QuickSight ENI 用セキュリティグループをソースとしたルールを追加します。
また、後ほど、EC2 から RDS Proxy 経由でログインしてデータベースを作成するので、EC2 のセキュリティグループをソースとしたルールも入れています。

スクリーンショット 2025-01-09 14.51.46

RDS MySQL のセキュリティグループ設定

RDS Proxy からの接続を許可するようインバウンドルールを設定します。
EC2 からの許可ルールも入れていますが、これは必須では無いのでご放念ください。

スクリーンショット 2025-01-09 15.00.17

RDS へログインし適当な DB を作成

パブリックの EC2 から RDS へログインします。

$ mysql -u <マスターユーザー名> -h <RDS Proxy エンドポイント> -p

ログインしたら、適当なデータベースおよびテーブルを作成します。これは後ほど、QuickSight から接続するデータベースになります。

mysql> CREATE DATABASE blog_db;
Query OK, 1 row affected (0.01 sec)

mysql> USE blog_db;
Database changed

mysql> SELECT DATABASE();
+------------+
| DATABASE() |
+------------+
| blog_db    |
+------------+
1 row in set (0.00 sec)

mysql> CREATE TABLE user (id int, name varchar(10));
Query OK, 0 rows affected (0.03 sec)

mysql> SHOW tables;
+-------------------+
| Tables_in_blog_db |
+-------------------+
| user              |
+-------------------+
1 row in set (0.00 sec)

mysql> INSERT INTO user values (1, 'Taro');
Query OK, 1 row affected (0.01 sec)

mysql> INSERT INTO user values (2, 'Hanako');
Query OK, 1 row affected (0.01 sec)

mysql> INSERT INTO user values (3, 'Jiro');
Query OK, 1 row affected (0.00 sec)

mysql> select * from user;
+------+--------+
| id   | name   |
+------+--------+
|    1 | Taro   |
|    2 | Hanako |
|    3 | Jiro   |
+------+--------+
3 rows in set (0.00 sec)

QuickSight 実行ロールの作成

以下の設定でロールを作成します。詳細は公式ドキュメントをご参照ください。
https://docs.aws.amazon.com/ja_jp/quicksight/latest/user/vpc-creating-a-connection-in-quicksight-console.html

カスタム信頼ポリシー

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "quicksight.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}

許可ポリシー

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ec2:CreateNetworkInterface",
                "ec2:ModifyNetworkInterfaceAttribute",
                "ec2:DeleteNetworkInterface",
                "ec2:DescribeSubnets",
                "ec2:DescribeSecurityGroups"
            ],
            "Resource": "*"
        }
    ]
}

QuickSight アカウント設定メニューからVPC接続定義を作成

QuickSight ホーム画面 → 右上プロフィールアイコン → QuickSight を管理 → VPC 接続の管理 → VPC接続の追加 の順に選択します。その後以下のように設定し、画像下側の "追加" ボタンを選択。

  • VPC接続名:<任意の名前>
  • VPC ID:今回使用しているRDS が所属する VPC
  • 実行ロール:前述の実行ロールを指定
  • サブネット:1a と 1c のプライベートサブネットを指定
  • セキュリティグループID:前述で作成済みの QuickSight ENI 用のセキュリティグループ ID

スクリーンショット 2024-12-05 22.00.55

VPC 接続が作成されます。以下のようにステータスが AVAILABLE になれば OK です。
スクリーンショット 2024-12-27 17.18.28

QuickSight データセットの作成

右上の "新しいデータセット" を選択します。
image (4)

データセットの中から「MySQL」を選択します。「RDS」ではないところがポイントです。
image5

データソースの設定は以下のようにします。ポイントはデータベースサーバーとして RDS Proxy のエンドポイントを指定する部分です。

  • データソース名:<任意の名前>
  • 接続タイプ:先ほど作成した VPC 接続を選択]
  • データベースサーバー:<RDS Proxy のエンドポイント>
  • ポート:3306
  • データベース名:前述の項で作成したデータベース名
  • ユーザー名:RDS のマスターユーザー名
  • パスワード:マスターユーザーのログイン時のパスワード
  • SSL の有効化:チェックを外す

完成形が以下画像です。画像左下のボタンは "接続を検証" するボタンなので、ボタンを押下して以下画像のように "検証済み" と表示されることを確認してください。確認できたら、右下の "データソースを作成" を選択します。

スクリーンショット 2025-01-09 15.48.55

「RDS へログインし適当な DB を作成」の項目で作成した blog_db.user テーブルを表示できました。

スクリーンショット 2025-01-09 15.59.11

終わりに

今回は、QuickSight から RDS Proxy に繋げるか試しました。
データセットで RDS を選ぶと RDS の DB 識別子しか選べないので、できないだろうなと思っていましたが、データソースを MySQL にすればできることがわかりました。
本記事がどなたかのお役に立てば幸いです。

参考文献

https://dev.classmethod.jp/articles/Install-mysql-on-al2023-and-login/
https://aws.amazon.com/jp/blogs/news/amazon-quicksight-private-vpc-access/

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.